package tp1.view;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.layout.ColumnLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.TextBox;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.Dialog;
import org.uqbar.arena.windows.WindowOwner;

import tp1.model.EsferasDelDragon;
import tp1.model.NewGame;
import tp1.model.Personaje;

public class NewGameDialog extends Dialog<NewGame> {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7673454850349029884L;
	
	private EsferasDelDragon mainModel;

	public NewGameDialog(WindowOwner owner, NewGame model, EsferasDelDragon mainModel) {
		super(owner, model);
		this.setTitle("Nuevo juego");
		this.mainModel = mainModel;
	}

	@Override
	protected void executeTask() {
		
	}
	
	public void accept() {
		this.getMainModel().createNewGame(this.getModel().getPersonajesParticipantes(), this.getModel().getTamanioTablero());
		this.close();
	}

	@Override
	protected void addActions(Panel actionsPanel) {
		new Button(actionsPanel)
			.setCaption("Aceptar")
			.onClick(new MessageSend(this, NewGameDialog.ACCEPT))
			.setAsDefault()
			.disableOnError();

		new Button(actionsPanel)
			.setCaption("Cancelar")
			.onClick(new MessageSend(this, NewGameDialog.CANCEL));
	}

	@Override
	protected void createFormPanel(Panel mainPanel) {
		
		Panel form = new Panel(mainPanel);
		form.setLayout(new ColumnLayout(2));
		
		new Label(form).setText("Tamaño de tablero (TxT):");
		
		new TextBox(form).bindValueToProperty(NewGame.TAMANIO_TABLERO);
		
		Panel personajes = new Panel(mainPanel);
		personajes.setLayout(new ColumnLayout(3));
		
		Table<Personaje> tableDisponibles = new Table<Personaje>(personajes, Personaje.class);
		tableDisponibles.bindContentsToProperty(NewGame.PERSONAJES_DISPONIBLES);
		tableDisponibles.bindSelection(NewGame.PERSONAJE_DISPONIBLE_SELECCIONADO);
		this.addColumn(tableDisponibles, "Personajes Disponibles");
		
		Panel buttonsPanel = new Panel(personajes);
		buttonsPanel.setLayout(new ColumnLayout(1));
		
		new Button(buttonsPanel).setCaption(">>>")
			.onClick(new MessageSend(this.getModel(), NewGame.AGREGAR));
		
		new Button(buttonsPanel).setCaption("<<<")
			.onClick(new MessageSend(this.getModel(), NewGame.QUITAR));
		
		Table<Personaje> tableParticipantes = new Table<Personaje>(personajes, Personaje.class);
		tableParticipantes.bindContentsToProperty(NewGame.PERSONAJES_PARTICIPANTES);
		tableParticipantes.bindSelection(NewGame.PERSONAJE_PARTICIPANTE_SELECCIONADO);
		this.addColumn(tableParticipantes, "Participantes");
	}
	
	protected void addColumn(Table<Personaje> table, String name) {
		Column<Personaje> idColumn = new Column<Personaje>(table);
		idColumn.setTitle(name);
		idColumn.bindContentsToProperty("nombre");
	}

	public EsferasDelDragon getMainModel() {
		return mainModel;
	}

}
